nba_24_25_playoff_shooting_data <- nba_24_25_playoff_shooting_data %>%
mutate(across(
c(`Restricted Area FGM`, `Restricted Area FGA`,
`In The Paint (Non-RA) FGM`, `In The Paint (Non-RA) FGA`,
`Mid-Range FGM`, `Mid-Range FGA`,
`Corner 3 FGM`, `Corner 3 FGA`,
`Above the Break 3. FGM`, `Above the Break 3. FGA`),
~ as.numeric(.)
)) %>%
mutate(
`3 FGM` = `Corner 3 FGM` + `Above the Break 3. FGM`,
`3 FGA` = `Corner 3 FGA` + `Above the Break 3. FGA`,
`3 FG%` = ifelse(`3 FGA` == 0, 0, (`3 FGM` / `3 FGA`) * 100),
`2 FGM` = `Restricted Area FGM` + `In The Paint (Non-RA) FGM` + `Mid-Range FGM`,
`2 FGA` = `Restricted Area FGA` + `In The Paint (Non-RA) FGA` + `Mid-Range FGA`,
`2 FG%` = ifelse(`2 FGA` == 0, 0, (`2 FGM` / `2 FGA`) * 100)
)
## Warning: There were 4 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `across(...)`.
## Caused by warning:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 3 remaining warnings.
The NBA playoffs are defined by high-stakes matchups, rapidly shifting strategies, and the constant search for competitive advantages. As modern basketball increasingly emphasizes spacing and perimeter shooting, an important analytical question emerges: To what extent does three-point shooting influence playoff success compared to two-point efficiency? In this report, we analyze team-level and player-level data from the 2024–2025 NBA playoffs to investigate how shooting performance across different zones—such as corner threes, above-the-break threes, and shots in the paint—relates to win percentage and overall postseason success. We aim to determine whether three-point percentage is a stronger predictor of playoff performance than two-point percentage, and which specific shooting areas contribute most to winning. We theorize that three-point efficiency is a significantly stronger predictor of playoff success than two-point efficiency in modern day basketball and that specific high-value shooting zones—particularly corner and above-the-break threes—provide meaningful competitive advantages for teams in the 2024–2025 NBA playoffs.
The two data sets being analyzed are from the official NBA Statistics website, in which data has been meticulously collected over the past several decades. The data is exclusively limited to playoff data, to disregard any intentional loosing for future draft picks, or other reasons, that teams my do in the regular season. There are two data sets that are being analyzed in this report, individual player shooting data that will be referred to as shooting_data, and team performance data that will be referred to as team_data. Both data sets are kept to strictly the 2024-25 Playoff season.
The shooting_data section looks at all players individual shooting statistics, averaged out per game in the playoffs. The columns include the player’s name, team, age, and shooting statistics. Each section of shooting statistics comes with three areas: field goals made (FGM), field goals attempted (FGA), and field goal percentage (FG%). The data set contains these statistics for shots taken in different areas of the court. Areas: - Restricted Area: Right under the basket, typically layups and dunks. Must be taken in the semi circle painted on the court under the basket. - In the Paint (Non - RA): These are shots taken in the painted region of the basketball court, below the free throw line, not including Restricted Area shots. These can possibly be dunks or layups if a player jumps or reaches far enough. - Mid-Range: These are shots taken inside of the three point line that do not fall under the previous two categories. - Left-Corner 3: Shots taken beyond the 3 point line in the left corner of the court. - Right-Corner 3: Shots taken beyond the 3 point line in the right corner of the court. - Corner 3: An aggregate of both Left and Right corner three point shots. Above the Break 3: Shots taken beyond the 3 point line that do not consider corner shots, they are taken either directly in-line with the basket or at a partial angle. - 3 and 2: Adjusted fields to get aggregate values for 2 and 3 point shooting.
The team_data section looks at each team’s performance in the playoffs, and maintains a team column with each Team’s abbreviated name. The columns that are being used in this analysis are WIN%, which is the winning percentage of a team, directly correlating to their success in the playoffs. There are also fields FGM, FGA, FG%, and 3PM, 3PA, 3P% which as in the shooting_data section look into team average shooting statistics per game, at the 2 and 3 point shot levels.
The data being analyzed does leave out certain players from teams that did not play impact, or any minutes. This is to remove players with no shooting data, or just one or two missed shots at the end of an already decided game. There are some unusualities in the data, in which NBA 3 point shooting has risen greatly over the last decade, teams simply put up more 3’s, which has been noted as the key strategy of the 2023-24 NBA Playoff Championship Boston Celtics. In addition, there may be a correlation between 2 and 3 point shooting, and certain team strategies may have affected this. Shai Gilgeous-Alexander, the finals MVP and star play for the Championship winning Oklahoma City Thunder is known for driving inside the paint and attempting to draw fouls, for free shots and free throws at a rate higher than many other players. This strategy, if a foul is called, allows the player to either shoot two free throws for 2 points, or (if they make the basket), it counts and they can shoot one additional free throw, gaining the same amount of points as a 3-point shot would have made. Strategies to raise the expected value on any given play such as this are changing yearly in the NBA, and thus 3-point shooting is on the rise. Other discrepancies note that “free shots”, such as break away lay-ups and dunks (usually in the Restricted Area) are always two points, and with no defense are almost certain to go in the basket. These kinds of shots can swing momentum, and teams who accumulate them are essentially gaining free points throughout the game. As a result, data may show that this shot is influential in game outcome, while it is more of a defensive outcome from a player stealing a ball, rather than an offensive shot.
In the following of this report, we will delve into the specifics of this data set, analyzing how 3-point shooting affects a given team’s chances to win in the 2024-25 NBA Playoffs. The analysis will inquire about the proportion of 3 vs 2 point shots, and how they affect a team’s winning percentage. In addition we will look at specific 3-point shooting data, and determine where the most affective areas of the court are for teams winning this year. We will look at the analysis of this data to determine whether 3-point shooting is as decisive of a factor towards winning in the NBA playoffs as popular media makes it out to be.
library(tidyverse)
library(dplyr)
library(readr)
library(ggplot2)
library(ggrepel)
nba_summary <- nba_24_25_playoff_shooting_data %>%
group_by(Team) %>%
summarise(
total_3FGA = sum(`3 FGA`),
total_2FGA = sum(`2 FGA`)
) %>%
full_join(
nba_24_25_playoff_team_data %>% select(Team, `WIN%`),
by = "Team"
)
nba_summary %>%
mutate(`3_2_pointDifference` = total_2FGA - total_3FGA) %>%
ggplot(aes(x = `3_2_pointDifference`, y = `WIN%`, color = Team)) +
geom_smooth(aes(group = 1), method = "lm", color = "black", se = FALSE) +
geom_point(size = 3) +
labs(
x = "3pt FGA - 2pt FGA",
y = "Win Percentage",
title = "Impact of 2-pt vs 3-pt Attempts on Playoff Win %"
)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 2 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Analysis - Team 3PT Shooting by Zone
# Aggregate player-level data to team-level averages for 3PT zones
team_zone_avgs <- nba_24_25_playoff_shooting_data %>%
group_by(Team) %>%
summarise(
`Left Corner 3 FG%` = mean(as.numeric(`Left Corner 3. FG%`), na.rm = TRUE),
`Right Corner 3 FG%` = mean(as.numeric(`Right Corner 3. FG%`), na.rm = TRUE),
`Above the Break 3 FG%` = mean(`Above the Break 3. FG%`, na.rm = TRUE)
) %>%
pivot_longer(
cols = c(`Left Corner 3 FG%`, `Right Corner 3 FG%`, `Above the Break 3 FG%`),
names_to = "Zone",
values_to = "FG_Percent"
)
## Warning: There were 8 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `Left Corner 3 FG% = mean(as.numeric(`Left Corner 3. FG%`),
## na.rm = TRUE)`.
## ℹ In group 8: `Team = "LAC"`.
## Caused by warning in `mean()`:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 7 remaining warnings.
This chunk of code is aggregating player-level three-point shooting data into team-level averages for the 2024–2025 NBA playoffs. Because our goal is to analyze how three-point shooting affects team win percentage and playoff success, we need a single shooting percentage per team per zone, rather than having multiple rows per player.
team_zone_avgs <- team_zone_avgs %>%
left_join(nba_24_25_playoff_team_data %>% select(Team, `WIN%`), by = "Team")
# Scatter plot with size proportional to WIN%
ggplot(team_zone_avgs, aes(x = Zone, y = FG_Percent, color = Team, size = `WIN%`)) +
geom_point() +
geom_text_repel(aes(label = Team), vjust = -0.5, size = 3, show.legend = FALSE) +
labs(
title = "NBA 2024-2025 Playoff Teams: 3PT FG% by Zone with WIN%",
x = "3-Point Zone",
y = "FG%",
size = "Win %"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# This code builds on the previous team-level aggregation of three-point shooting percentages and creates a scatter plot visualizing 3PT shooting performance by zone for each playoff team, while also showing team success (win percentage) as the size of the points.((0.2%-Smallest sized point), (0.4% - Medium sized point) (0.6%-Large sized point))
After these graphing results we infer that the right corner three should be the strongest indicator to a teams success as both OKC and IND made it to the finals and both rank the highest on the right corner three FG%.
# Make sure team averages and WIN% are joined
team_zone_avgs <- nba_24_25_playoff_shooting_data %>%
group_by(Team) %>%
summarise(
Left_Corner_3_FG = mean(as.numeric(`Left Corner 3. FG%`), na.rm = TRUE),
Right_Corner_3_FG = mean(as.numeric(`Right Corner 3. FG%`), na.rm = TRUE),
Above_the_Break_3_FG = mean(`Above the Break 3. FG%`, na.rm = TRUE)
) %>%
left_join(nba_24_25_playoff_team_data %>% select(Team, `WIN%`), by = "Team")
## Warning: There were 8 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `Left_Corner_3_FG = mean(as.numeric(`Left Corner 3. FG%`), na.rm
## = TRUE)`.
## ℹ In group 8: `Team = "LAC"`.
## Caused by warning in `mean()`:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 7 remaining warnings.
# Correlation tests for each zone
cor_left <- cor.test(team_zone_avgs$Left_Corner_3_FG, team_zone_avgs$`WIN%`)
cor_right <- cor.test(team_zone_avgs$Right_Corner_3_FG, team_zone_avgs$`WIN%`)
cor_above <- cor.test(team_zone_avgs$Above_the_Break_3_FG, team_zone_avgs$`WIN%`)
cor_left
##
## Pearson's product-moment correlation
##
## data: team_zone_avgs$Left_Corner_3_FG and team_zone_avgs$`WIN%`
## t = 1.9832, df = 14, p-value = 0.06732
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.03567938 0.78238802
## sample estimates:
## cor
## 0.4683087
cor_right
##
## Pearson's product-moment correlation
##
## data: team_zone_avgs$Right_Corner_3_FG and team_zone_avgs$`WIN%`
## t = 1.8329, df = 14, p-value = 0.08817
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.07135323 0.76811658
## sample estimates:
## cor
## 0.4399119
cor_above
##
## Pearson's product-moment correlation
##
## data: team_zone_avgs$Above_the_Break_3_FG and team_zone_avgs$`WIN%`
## t = 2.2866, df = 14, p-value = 0.03831
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.0347359 0.8082434
## sample estimates:
## cor
## 0.5214623
#put data into SharedData so that graph can be interactive
nba_shared_data <- SharedData$new(nba_sum, key = ~Team, group = "NBA_Data")
nba_3v2FGM_plot <- nba_shared_data %>%
ggplot(aes(x = `2 FGM`, y = `3 FGM`)) +
geom_point(size = 3, aes(color = `WIN%`, text = paste("Team:", Team, "\nWin %:",`WIN%`, "\nPlayer:", Player))) +
scale_color_gradientn(
colors = c("blue", "dodgerblue","deepskyblue", "white", "orange", "red", "darkred")
) +
geom_vline(xintercept = mean(nba_sum$`2 FGM`), linetype = "dashed", alpha = 0.5) +
geom_hline(yintercept = mean(nba_sum$`3 FGM`), linetype = "dashed", alpha = 0.5) +
labs(
y = "3-Point FG Made", x = "2-Point FG Made", title = "3 vs 2 Point Field Goals Made, Win% Gradient in 24-25 Playoffs"
)
## Warning in geom_point(size = 3, aes(color = `WIN%`, text = paste("Team:", :
## Ignoring unknown aesthetics: text
interactive <- ggplotly(nba_3v2FGM_plot, tooltip = c("text", "x", "y"))
team_filter <- filter_select(
id = "team_select",
label = "Select Team:",
sharedData = nba_shared_data,
group = ~Team,
allLevels = TRUE
)
browsable(
tagList(
team_filter,
interactive
)
)
nba_24_25_playoff_team_data %>%
ggplot(aes(x = `FGM`-`3PM`, y = `3PM`)) +
geom_point(size = 3, aes(color = `WIN%`)) +
scale_color_gradientn(
colors = c("blue", "dodgerblue","deepskyblue", "white", "orange", "red", "darkred")
) +
geom_text_repel(aes(label = Team), vjust = -0.5, size = 3, show.legend = FALSE) +
geom_vline(aes(xintercept = mean(`FGM`-`3PM`)), linetype = "dashed", alpha = 0.5) +
geom_hline(aes(yintercept = mean(`3PM`)), linetype = "dashed", alpha = 0.5) +
labs(
y = "3-Point FG Made", x = "2-Point FG Made", title = "3 vs 2 Point Field Goals Made by Team in 24-25 Playoffs"
)
After these graphs we can infer that 3 point shooting alone does not directly correlate to teams achieveing a high winning percentage in the playoffs. The charts show teams are most efficient when shooting the most 2 and 3 point field goals, which makes sense at that directly means they are scoring more points throughout the game. There is definetly an appearance of teams doing well that average more 2s than the average. However, it appears there is little to no success for teams that shoot well below the average amount of 3’s in a game, while there are teams, such as the Boston Celtics (2023-24 NBA Champions), who shoot a much lower average of 2 point field goals, while being able to maintain a high winning percentage.
#Looking at the correlation between 2 and 3 point shots
cor_2v3 <- cor.test(nba_sum$`2 FGM`, nba_sum$`3 FGM`)
cor_2vWin <- cor.test(nba_sum$`2 FGM`, nba_sum$`WIN%`)
cor_3vWin <- cor.test(nba_sum$`3 FGM`, nba_sum$`WIN%`)
#Looking at the correlation between 2 and 3 point shots
cor_2v3
##
## Pearson's product-moment correlation
##
## data: nba_sum$`2 FGM` and nba_sum$`3 FGM`
## t = -1.2092, df = 94, p-value = 0.2296
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.31639562 0.07867798
## sample estimates:
## cor
## -0.1237601
#Looking at the correlation between 2 point shots and Winning
cor_2vWin
##
## Pearson's product-moment correlation
##
## data: nba_sum$`2 FGM` and nba_sum$`WIN%`
## t = 0.46152, df = 94, p-value = 0.6455
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1544095 0.2456922
## sample estimates:
## cor
## 0.04754836
#Looking at the correlation between 3 point shots and Winning
cor_3vWin
##
## Pearson's product-moment correlation
##
## data: nba_sum$`3 FGM` and nba_sum$`WIN%`
## t = 0.061819, df = 94, p-value = 0.9508
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1943584 0.2065979
## sample estimates:
## cor
## 0.006376005
cor_2vLoss <- cor.test(nba_sum$`2 FGM`, 1 - nba_sum$`WIN%`)
cor_3vLoss <- cor.test(nba_sum$`3 FGM`, 1 - nba_sum$`WIN%`)
#Looking at the correlation between 2 point shots and Loosing
cor_2vLoss
##
## Pearson's product-moment correlation
##
## data: nba_sum$`2 FGM` and 1 - nba_sum$`WIN%`
## t = -0.46152, df = 94, p-value = 0.6455
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2456922 0.1544095
## sample estimates:
## cor
## -0.04754836
#Looking at the correlation between 3 point shots and Loosing
cor_3vLoss
##
## Pearson's product-moment correlation
##
## data: nba_sum$`3 FGM` and 1 - nba_sum$`WIN%`
## t = -0.061819, df = 94, p-value = 0.9508
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2065979 0.1943584
## sample estimates:
## cor
## -0.006376005
The is a possibly non-negligible correlation received between the amount of 2 and 3 point shots in the NBA playoffs. Thus, for the most part teams tend to favor one type of shot. This can possibly affect the other correlations but for now we will continue to compute. The correlation tests actually show that making more 2 point field goals has a higher correlation to winning percentage than 3 point field goals. Inversely making more 2 point shots has a larger negative correlation on the loss % of teams as well. This data could have been slightly skewed by the winning Oklahoma City Thunder (OKC) who shot more two point shots than any other team, and teams such as the Los Angeles Lakers (LAL) and Miami Heat (MIA) who shot a large majority of their shots from the 3 point range in their short, loosing playoff stints. However, since OKC won the Championship, any many other winning teams did not fall beyond the 2-point mean, large amounts of 2-point shots seem to have a greater correlation to winning teams.
There appear to be pockets of high-win-rate players in all four quadrants of the dataset, which makes sense because basketball is a team sport with varied offensive strategies. However, many of the most successful performances cluster in the upper-right quadrant, indicating that high volumes of both 2-Point Field Goals Made and 3-Point Field Goals Made contribute strongly to playoff success. This aligns with the second graph (Impact of 2-pt vs. 3-pt Attempts on Playoff Win %), which shows that higher volumes of 2-Point Field Goal Attempts relative to 3-Point FGA are generally associated with a higher win percentage. The team-specific graph further supports this finding: nearly all of the highest-winning teams (CLE, MIL, MIN, IND, LAC, OKC) had above-average 2-Point Field Goals Made. Taken together, the three graphs suggest that successful teams depend on both 3-point and 2-point production, with 2-Point FGM playing a particularly important role. Maintaining a balanced and effective scoring profile across both areas appears vital for maximizing playoff win percentage. In our initial thesis, we stated that higher 3-point efficiency would be more important than 2-point efficiency. Our results show a more nuanced conclusion: although both areas matter, teams generally need significantly more 2-Point FGA than 3-Point FGA to perform well in the playoffs. We also found that the right-corner three is the most impactful three-point zone, though all 3-point shooting zones show a strong correlation with win percentage. This partially supports our original thesis but highlights that 2-point volume and consistency carry substantial weight as well. For future analysis, it would be interesting to run a similar study using a full regular-season dataset to see whether these trends remain consistent outside the playoffs. Another extension could examine timing—specifically, whether clutch 3-pointers produce stronger correlations with success than regular 2-point attempts. Understanding how late-game shot selection affects win probability could reveal additional insights beyond overall scoring volume.